package cn.zhukelili.generic;

/**
 * @description:
 * @author: hhbeast
 * @since: 2018/7/22 18:55
 */
public class Client {
    public static void main(String[] args) {
        //创建一个根节点
        Composite root = new Composite();
        root.doSomething();
        //创建一个树枝构件
        Composite branch = new Composite();
        //创建一个叶子节点
        Leaf leaf = new Leaf();
        //建立整体
        root.add(branch);
        branch.add(leaf);
    }

    //通过递归遍历树
    public static void display(Composite root) {
        for (Component c : root.getChildren()) {
            if (c instanceof Leaf) { //叶子节点
                c.doSomething();
            } else { //树枝节点
                display((Composite) c);
            }
        }
    }
}

/*
各位可能已经看出一些问题了，组合模式是对依赖倒转原则的破坏，但是它还有其他类
型的变形，面向对象就是这么多的形态和变化，请读者继续阅读下去，就会找到解决方案。
 */
